多条件排序
有个这么个要求,给一组数组
|
|
要求a从小到大排序,a相等的b从大到小排序
首先实现属性a从小到大排序
|
|
接着继续掉调用把属性a排序好的数组
|
|
打印一下,也没问题。本以为就这样能搞定的我,还是图样了。
当我把数组的元素增加多几个的时候:
|
|
问题就来了,使用上面的方法排序,完全得不到预想的结果。
这明明刚才还可以的怎么增加一点数据就完全变样了呢,所谓一言不合看源码。还真是有道理
v8 array部分源码 (搜索“InnerArraySort”)
可以看到该方法首行就备注了12// In-place QuickSort algorithm.// For short (length <= 10) arrays, insertion sort is used for efficiency.
V8 引擎 sort 函数只给出了两种排序 InsertionSort 和 QuickSort,数量小于10的数组使用 InsertionSort,比10大的数组则使用 QuickSort。
快排不像插入排序,从后往前扫相邻的两个元素进行比较,而是找基准,遍历数组,小于基准的放在left,大于基准的放在right,递归
修改后的方法
|
|
封装一下
|
|